function [coefs, indx, leq] = simplexLineParse(linea)
%                 SIMPLEXPARSELINE
%
% Funcion que examina una linea, ya sea una restriccion o una funcion
% objetivo, y regresa dos arreglos, uno que tiene coeficientes, y el otro
% contiene indices que indican que variable se trata. 
%
% El formato de la linea que se va a leer es una de las siguientes dos
% opciones:
%       
%       1) #R# C1x_1 + C2x_2 + C3x_3 - C4x_4 + ... + Crx_r > B1_0
%       2) #O# C1x_1 + C2x_2 + C3x_3 - C4x_4 + ... + Crx_r
%
% En el caso 1), se trata de una restriccion, en la ultima entrada del
% arrelgo coefs se escribe el valor del correspondiente lado derecho de la
% restriccion. Se especifica en leq si es una restriccion de mayor o igual
% (con un 0) o menor o igual (1). En indx, se identifica a que variable se
% refieren cada una de las entradas de coefs. Notar que si es restriccion
% de menor o igaul o mayor o igual, basta con escribir un '<' o un '>'.
%
% En el caso 2), se trata de una funcion objetivo, el arreglo de indices 
% (indx) debe ser de la forma  indx=(1:m). los coeficientes corresponden
% todos a los costos de las variables originales. En leq aparecera un -1
% para indicar que la linea corresponde a una funcion objetivo.
% 
% usage:   [coefs, indx, leq] = simplexLineParse(linea)
%          donde:
%                coefs := coeficientes de las x_i de la linea
%                 indx := vector de indices que indica las variables a las
%                        que corresponden los coeficientes de coefs.
%                  leq := indica si se trata de una restriccion de mayor o
%                        igual (0), menor o igual (1), o igualdad (2). Si
%                        se trata de una funcion objetivo regresa (-1)
%                linea := linea de entrada.
% 
%                                   - Marcela Maldonado Figueroa -
%                                     - Pedro Orozco del Pino -
%                                    - Jose Alonso Solis Lemus -
%
fprintf('\n Entro a simplexLineParse');
c = cputime;
if (~isempty(strfind(linea, 'R'))) || (~isempty(strfind(linea, 'O')))
    % Se trata de una restriccion o de una funcion objetivo
        coefi = []; coefs = [];
        indxi = []; indx = []; otro = [];
        aux = regexp(linea, '\w*[.x_]\w*', 'match');
        auxsign = regexp(linea, '\w*- \w*', 'match');
        auxdecimales = regexp(linea, '\w*- 0.\w*', 'match');
        
        
        for i=1:length(aux)
            charaux = char(aux(i));
            [coefi, indxi] = simplexCoefParse(charaux);
            coefs = [coefs coefi];
            indx = [indx indxi];
        end
        
        if ~isempty(auxsign)
            % oh, oh, hay que cambiar los coeficientes que tengan signos
            % negativos :(
            negs = [];
            for i=1:length(aux)
                for j=1:length(auxsign)
                    if ~isempty(findstr(char(aux(i)), char(auxsign(j))))
                        coefs(i) = (-1)*coefs(i);
                    end
                end
            end
        end
        
        if ~isempty(auxdecimales)
            % oh, oh, hay que cambiar los coeficientes que tengan signos
            % negativos :(
            negs = [];
            for i=1:length(aux)
                for j=1:length(auxdecimales)
                    if ~isempty(findstr(char(aux(i)), char(auxdecimales(j))))
                        coefs(i) = (-1)*coefs(i);
                    end
                end
            end
        end 
        
        
        if ~isempty(strfind(linea, 'O'))
            % es una funcion objetivo
            leq = -1;
        else
            % es una restriccion
            ineqsym = char(regexp(linea, '[<>=]', 'match'));
            switch ineqsym
                case {'<','<='}
                    leq = 1;
                case {'>', '>='}
                    leq = 0;
                case '='
                    %leq = [1;0];
                    leq = 2;
                    %otro = 1;
            end
        end
else
    % se introdujo una linea erronea
    fprintf('\nQue no leiste el help? las lineas tienen un formato!');
    coefs = [];
    indx = [];
    leq = [];
end
c = cputime - c;
fprintf('\n Salgo de simplexLineParse\n');
        